package models

import (
	"time"
)

// QldOutletFaultInfo 设备发生故障时，信息记录表
type QldOutletFaultInfo struct {
	Id          int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"`
	AreaId      int64     `gorm:"column:area_id;type:bigint(20);comment:园区id" json:"area_id"`
	DeviceState int       `gorm:"column:device_state;type:tinyint(4);comment:设备状态 与表 qld_outlet 中 status 同步 0 : 正常状态  1：故障 2：离线" json:"device_state"`
	DeviceId    int64     `gorm:"column:device_id;type:bigint(20);comment:设备Id" json:"device_id"`
	UpdateTime  time.Time `gorm:"column:update_time;type:datetime" json:"update_time"`
	CreateTime  time.Time `gorm:"column:create_time;type:datetime" json:"create_time"`
}

func (m *QldOutletFaultInfo) TableName() string {
	return "qld_outlet_fault_info"
}

func AddQldOutletFaultInfo(info *QldOutletFaultInfo) (*QldOutletFaultInfo, error) {
	err := DB.Create(&info).Error
	if err != nil {
		return nil, err
	}
	return info, nil
}

func GetQldOutletFaultInfo(areaId int64) (*QldOutletFaultInfo, error) {
	var info []*QldOutletFaultInfo
	err := DB.Model(&QldOutletFaultInfo{}).Select("id,area_id,device_state,device_id,update_time,create_time").
		Where("area_id=?", areaId).Where("device_state <> ?", 0).Limit(1).Order("create_time DESC").Find(&info).Error
	if err != nil {
		return nil, err
	}

	if len(info) > 0 {
		return info[0], nil
	} else {
		return &QldOutletFaultInfo{}, nil
	}
}

func BatchAddQldOutletFaultInfo(infoList []*QldOutletFaultInfo) error {
	// 批量插入到数据库 gorm v1.9.12 没有批量插入函数 使用循环替代
	for _, info := range infoList {
		if err := DB.Create(&info).Error; err != nil {
			return err
		}
	}
	return nil

}
